package org.example;

/**
 * 关于 enclosingClass 和 declaringClass的区别
 * enclosingClass---class org.example.Outter 获取的是包裹类
 * declaringClass---class org.example.Outter  获取的是声明类
 *
 *  正常情况下,上面两者无区别.
 *  enclosingClass:"包裹 "的类.如当前类是个局部内部类,则返回外部的类名
 *                                          如当前是匿名内部类,则返回外部的类名
 *  declaringClass:"声明 "的类.如当前类是个局部内部类,则返回null
 *                                          如当前是匿名内部类,则返回null
 *
 * declaredClass--- class org.example.Outter$Medium$Inner 获取的是内部类
 */
public class AppClazzInfo {
    public static void main(String[] args) {
        System.out.println("进入AppClazzInfo类的main方法了");

        Outter.Medium medium = new Outter().new Medium();

        Class<?> enclosingClass = medium.getClass().getEnclosingClass();
        System.out.println("enclosingClass---" + enclosingClass);

        Class<?> declaringClass = medium.getClass().getDeclaringClass();
        System.out.println("declaringClass---" + declaringClass);

        Class<?>[] declaredClasses = medium.getClass().getDeclaredClasses();
        for (Class clazz : declaredClasses
        ) {
            System.out.println("declaredClass---" + clazz);
        }
    }

}
